首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏互联网杂技

    Event Loop

    四、Event Loop 主线程从"任务队列"中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)。 为了更好地理解Event Loop,请看下图(转引自Philip Roberts的演讲《Help, I'm stuck in an event-loop》)。 ? 六、Node.js的Event Loop Node.js也是单线程的Event Loop,但是它的运行机制不同于浏览器环境。 根据上图,Node.js的运行机制如下。 它将不同的任务分配给不同的线程,形成一个Event Loop(事件循环),以异步的方式将任务的执行结果返回给V8引擎。 (4)V8引擎再将结果返回给用户。 至于2排在TIMEOUT FIRED的后面(即函数B在timeout后面触发),是因为setImmediate总是将事件注册到下一轮Event Loop,所以函数A和timeout是在同一轮Loop执行

    1.9K70发布于 2018-04-02
  • 来自专栏用户1175783的专栏

    # Event loop

    [TOC] ​ dart是一种单线程语言,异步模型主要是通过事件轮询(event loop)来实现,另外也提供了更高级的Isolate来支持多线程,通常用于计算比较耗时的操作。 # Event loop ​ dart中的事件轮询包含两种事件队列:MicroTask和 EventTask,其中经常使用的属于EventTask队列,MicroTask并不常用,也不推荐使用。 while (microTaskQueue.isNotEmpty){ //执行MicroTask队列 } if (eventQueue.isNotEmpty){ //执行Event Stream的运行原理: # MicroTask与EventTask的执行顺序对比: 下面有两段官方提供的代码足以搞懂他们的区别: https://dart.dev/articles/archive/event-loop #question-1 https://dart.dev/articles/archive/event-loop#question-2 # Isolate dart是一个单线程程序,在执行耗时的操作是会导致线程卡住

    2.1K30发布于 2019-09-10
  • 来自专栏全栈者

    细谈 Event Loop

    event loop event loop翻译出来就是事件循环,可以理解为实现异步的一种方式,我们来看看event loop在HTML Standard中的定义章节: 第一句话: 为了协调事件,用户交互 每一个用户代理必须至少有一个浏览器上下文event loop,但是每个单元的相似源浏览器上下文至多有一个event loopevent loop 总是具有至少一个浏览器上下文,当一个event loop的浏览器上下文全都销毁的时候,event loop也会销毁。一个浏览器上下文总有一个event loop去协调它的活动。 Worker的event loop相对简单一些,一个worker对应一个event loop,worker进程模型管理event loop的生命周期。 event loop的处理过程(Processing model) 在规范的Processing model定义了event loop的循环过程: 一个event loop只要存在,就会不断执行下边的步骤

    2.1K30发布于 2019-10-09
  • 来自专栏女程序员的日常_Lin

    Event Loop(1)

    1 浏览器中的Event Loop ---- 当我们执行JS代码时其实就是往执行栈中放入函数,遇到异步函数会被挂起并在需要执行的时候加入到Task队列中。 一旦执行栈为空,Event Loop就会在Task队列中拿出需要执行的代码并放入到执行栈中执行。 ? 不同的任务源会被分配到不同的Task队列中,任务源可以分为微任务和宏任务。

    95410发布于 2020-02-11
  • 来自专栏webTower

    JavaScript Event Loop

    event-loop 这里有一点很重要,宏任务是一次执行一个,而微任务是一次执行完微任务队列中所有的任务。 event loop 通过上面的 Promise 例子也能看出,当微任务执行时间特别长时,计时器延时会很大。 Node.js 11.x 版本的变动 从 Node.js 11.x 版本开始,Node 中的 event loop 已经与浏览器趋于相同。 参考资料 浏览器与 Node 的事件循环(Event Loop)有何区别? //nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/ 深入事件环(In The Loop)Jake Archibald@JSconf 2018

    1.8K20发布于 2020-03-26
  • 来自专栏格物致知

    event_base_loop

    函数: int event_base_loop(struct event_base *, int); 等待事件被触发,然后调用它们的回调函数。这是 event_base_dispatch的更灵活版本。 默认情况下,这个循环会一直运行,直到没有添加的事件,或者直到调用了event_base_loopbreak()或者evenet_base_loopexit().你可以通过flags参数修改这个行为。 参数1:eb表示event_base结构体。 参数2:flags是EVLOOP_ONCE | EVLOOP_NONBLOCK的组合。 返回值:0表示成功,-1表示发生了错误,1表示没有事件被注册。 EVLOOP_ONCE: 阻塞直到有一个活跃的event,然后执行完活跃事件的回调就退出。 EVLOOP_NONBLOCK : 不阻塞,检查哪个事件准备好,调用优先级最高的那一个,然后退出。

    73020编辑于 2022-08-19
  • 事件循环Event Loop

    这种循环叫做事件循环(Event Loop) js是单线程,js任务也要一个一个顺序执行。如果一个任务耗时过长,那么后一个任务也必须等着。 因此聪明的程序员将任务分为两类:1)同步任务 2)异步任务 一张图表示事件循环 #1.同步和异步任务分别进入不同的执行"场所",同步的进入主线程,异步的进入Event Table并注册函数。 #2.当指定的事情完成时,Event Table会将这个函数移入Event Queue。 #3.主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行。 #4.上述过程会不断重复,也就是常说的Event Loop(事件循环)。 主线程执行栈何时为空? js引擎存在monitoring process进程,会持续不断的检查主线程执行栈是否为空,一旦为空,就会去Event Queue那里检查是否有等待被调用的函数。

    1.4K10编辑于 2022-08-11
  • 来自专栏前端黑板报

    图说 Event-Loop

    这就需要引入我们今天要讲解的:Event-Loop。 在我们开始之前,先假设要讲解的 Event-loop 是运行在浏览器中的,不是在 Node 或者其它环境里。 The event loop ? event loop 是一个一直在检测 call stack 是否为空的进程。 同时,event loop 也会检查 call stack 是否为空: ? JS 的运行时会执行栈顶的代码然后移除它: ? event loop 又来了: ? event loop 发现 call stack 并没有空所以它什么也不会干,继续向下执行直到 foo() 函数的结尾: ? 现在,event loop 是个幸运儿: ? 接下来,event loop 会检测 message queue 里是否有消息: ? 之后会发送消息相关的函数到 call stack: ?

    78110发布于 2021-01-21
  • 来自专栏前端布道

    JavaScript之Event Loop

    下面我们一个一个的来了解 Event Loop 相关的知识点,最后再一步一步分析出本段代码最后的输出顺序。 上图中,主线程运行的时候,产生堆(heap)和栈(stack),栈中的代码调用各种外部API,它们在"任务队列"中加入各种事件(DOM Event,ajax,setTimeout…)。 以上两种运行机制,主线程都从"任务队列"中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为 Event Loop(事件循环)。 console.log(7); }, 50); // } 此时输出为:7 运行微任务: 无 综上,最终的输出顺序是:1 8 9 6 11 12 10 2 3 4 5 13 7 参考资料 javascript中的Event Loop详解 JavaScript 运行机制详解:再谈Event Loop 并发模型与事件循环 这一次,彻底弄懂 JavaScript 执行机制 Node探秘之事件循环(2)--setTimeout/

    1.1K120发布于 2018-04-24
  • 来自专栏前端开发进阶

    带你了解Event Loop

    但对于一些异步操作JS是如何使用Event Loop去处理他们不会导致阻塞呢,我们下面来看一下。 Event Loop 是什么? 上述过程会不断重复,也就是常说的Event Loop(事件循环)。 浏览器中的Event Loop下面我们来看一下在浏览器中Event Loop的机制:图片我们可以看到,定时器和一些异步xhr属于 Task Queue这个队列,Promise和mutaition observer Loop看完了浏览器中的Event Loop,下面我们来看一下node环境中的,在Node环境中运行以下代码会怎么输出呢? 应用其实Node的单线程非阻塞 IO 模型,就是基于这种Event Loop来实现的,具备强大的并发能力。

    97731编辑于 2022-06-10
  • 来自专栏阮一峰的网络日志

    什么是 Event Loop

    Event Loop 是一个很重要的概念,指的是计算机系统的一种运行机制。 JavaScript语言就采用这种机制,来解决单线程运行带来的一些问题。 本文参考C. Aaron Cois的《Understanding The Node.js Event Loop》,解释什么是Event Loop,以及它与JavaScript语言的单线程模型有何关系。 想要理解Event Loop,就要从程序的运行模式讲起。运行以后的程序叫做"进程"(process),一般情况下,一个进程一次只能执行一个任务。 如果有很多任务需要执行,不外乎三种解决方法。 Event Loop就是为了解决这个问题而提出的。Wikipedia这样定义: "Event Loop是一个程序结构,用于等待和发送消息和事件。 每当遇到I/O的时候,主线程就让Event Loop线程去通知相应的I/O程序,然后接着往后运行,所以不存在红色的等待时间。等到I/O程序完成操作,Event Loop线程再把结果返回主线程。

    1.3K80发布于 2018-04-12
  • 来自专栏鲸鱼动画

    Event loop 事件循环

    事件循环是JavaScript中的一种机制,用于管理和调度各种事件的执行顺序。在JavaScript中,事件可以是用户交互(如点击按钮、输入文本)或是异步操作(如获取数据、定时器)等。

    52400编辑于 2024-05-24
  • 来自专栏前端卡卡西

    js的event loop

    Js的Event Loop js单线程 ​ 总所周知,JavaScript是单线程的,也就是说同一时间只能做一件事,那为什么JavaScript不能是多线程的呢,这跟它的用途有关,作为浏览器脚本语言 task) 等待执行栈和微任务队列都执行完毕才会执行,并且在执行完每一个宏任务之后,会去看看微任务队列有没有新添加的任务,如果有,会先将微任务队列中的任务清空,才会继续执行下一个宏任务 为了更好地理解Event Loop,请看下图(转引自Philip Roberts的演讲《Help, I'm stuck in an event-loop》) 案例 案例1 console.log(111); setTimeout 需要注意的是,立即resolve()的 Promise 对象,是在本轮“事件循环”(event loop)的结束时执行,而不是在下一轮“事件循环”的开始时。

    1.3K20编辑于 2022-02-25
  • 来自专栏Super 前端

    Event loop 及 macrotask & microtask

    Event Loop Event Loop 是在 HTML Standard 中定义的:To coordinate events, user interaction, scripts, rendering 独立 每个”线程“都有自己的 Event Loop。 所以,每个 web worker 拥有独立的 Event Loop,它们都可以独立运行;同源的 windows 共享一个 Event Loop,它们之间可以互相通信。 A window event loop is the event loop used by similar-origin window agents. A worker event loop is the event loop used by dedicated worker agents, shared worker agents, and service

    67331发布于 2019-08-15
  • 来自专栏互联网杂技

    没有event loop的PHP

    javascript是单线程脚本语言,所以有了event loop机制,但是 php真的有多进程,多线程吗?

    1.1K40发布于 2018-04-02
  • 来自专栏偏前端工程师的驿站

    Yet Another Intro to Event Loop

    Long long ago, event loop was even simple, pure and naive. : What does event loop look like? What does event loop look like? Recap Now, we have learn event loop, macro queue and micro queue in detail. event loop will have a phone call to micro queue "Hi, there!

    45420发布于 2021-10-28
  • 来自专栏李白偷偷偷猪

    事件循环机制(Event Loop

    JS中的Event Loop 众所周知 JS 是⻔⾮阻塞单线程语⾔,因为在最初 JS 就是为了和浏览器交 互⽽诞⽣的。 ⼀旦执⾏栈为空, Event Loop 就会从 Task 队列中拿出需要执⾏的代码并放⼊执⾏栈中执⾏,所以本 质上来说 JS 中的异步还是同步⾏为。 loop 顺序是这样的 执⾏script主体代码,这属于宏任务 执⾏栈为空,查询是否有微任务需要执⾏ 执⾏所有微任务 必要的话渲染 UI 然后开始下⼀轮 Event loop ,重复上述过程 通过上述的 Event loop 顺序可知,如果宏任务中的异步代码有⼤量的计算 并且需要操作 DOM 的话,为了更快的响应界⾯响应,我们可以把操作 DOM 放⼊微任务中 Node 中的 Event loop Node 中的 Event loop 和浏览器中的不相同。

    1K10编辑于 2022-11-15
  • 来自专栏Super 前端

    Event loop及macrotask & microtask

    Event Loop Event Loop 是在 HTML Standard 中定义的:To coordinate events, user interaction, scripts, rendering 独立 每个”线程“都有自己的 Event Loop。 所以,每个 web worker 拥有独立的 Event Loop,它们都可以独立运行;同源的 windows 共享一个 Event Loop,它们之间可以互相通信。 A window event loop is the event loop used by similar-origin window agents. A worker event loop is the event loop used by dedicated worker agents, shared worker agents, and service

    49520发布于 2021-08-30
  • 来自专栏前端进阶之路

    带你彻底弄懂Event Loop

    希望大家可以通过这篇文章,了解到Event Loop到底是一种什么机制,浏览器和NodeJS的Event Loop又有什么区别。如果在文中出现书写错误的地方,欢迎大家留言一起探讨。 ,如果对你有用,就请给个Star吧~) 正文 Event Loop是什么 event loop是一个执行模型,在不同的地方有不同的实现。 浏览器和NodeJS基于不同的技术实现了各自的Event Loop。 浏览器的Event Loop是在html5的规范中明确定义。 NodeJS的Event Loop是基于libuv实现的。 libuv已经对Event Loop做出了实现,而HTML5规范中只是定义了浏览器中Event Loop的模型,具体的实现留给了浏览器厂商。 浏览器的Event Loop就说到这里,下面我们看一下NodeJS中的Event Loop,它更复杂一些,机制也不太一样。

    56110编辑于 2022-04-08
  • 来自专栏Article

    JavaScript中的Event Loop

    practice, this requirement ensures that onFulfilled and onRejected execute asynchronously, after the event loop turn in which then is called, and with a fresh stack. Event Loop规范 HTML5规范里有Event loops这一章节。 每个浏览器环境,至多有一个event loop。 一个event loop可以有1个或多个task queue。 每个(task source对应的)task queue都保证自己队列的先进先出的执行顺序,但event loop的每个turn,是由浏览器决定从哪个task source挑选task。 Jobs and Job Queues规范 本来应该接着上面Event Loop的话题继续深入,讲macro-task和micro-task,但先不急,我们跳到ES2015规范,看看Jobs and Job

    53510编辑于 2022-06-14
领券